#include <stdio.h>
#include <signal.h>
#include <unistd.h>

int count1 = 0;
int count2 = 0;
void handler(int signo){
  if(signo == 2){
    printf("我是2号信号\n");
    count1++;
  }
  if(signo == 40){
    printf("我是40号信号\n");
    count2++;
  }
}
int main(){
  signal(2, handler);
  signal(40, handler);
  
  sigset_t iset, oset;
  
  //初始化信号集
  sigemptyset(&iset);
  sigemptyset(&oset);

  //将2号和40号信号写入iset信号集
  sigaddset(&iset,2);
  sigaddset(&iset,40);

  sigprocmask(SIG_SETMASK, &iset, &oset);//将iset的信号集设置为当前进程的屏蔽字，并获取旧的屏蔽字
  
  sleep(60);

  sigprocmask(SIG_SETMASK, &oset, NULL);//恢复对原有信号的捕捉

  printf("2号信号收到了 %d 次\n", count1);
  printf("40号信号收到了 %d 次\n", count2);
  return 0;
}
